home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1146 / 1146.xpi / chrome / screengrab.jar / content / Java.js < prev    next >
Text File  |  2009-03-09  |  3KB  |  76 lines

  1. /**
  2.  * @author 602527127
  3.  */
  4. screengrab.Java = {
  5.     clForJar : new Object(),
  6.     
  7.     getStackTrace: function(e) {
  8.         if (e.printStackTrace == undefined) {
  9.             return e;
  10.         }
  11.         var baos = new java.io.ByteArrayOutputStream();
  12.         var ps = new java.io.PrintStream(baos);
  13.         e.printStackTrace(ps);
  14.         ps.close();
  15.         return baos.toString();
  16.     },
  17.     newArray: function(type) {
  18.         var arrayLen = arguments.length - 1;
  19.         var array = java.lang.reflect.Array.newInstance(java.lang.Class.forName(type), arrayLen);
  20.         for (var i = 0; i < arrayLen; i++) {
  21.             array[i] = arguments[i + 1];
  22.         }
  23.         return array;
  24.     },
  25.     getClass: function(className, jar) {
  26.         try {
  27.             var jarCl = this.clForJar[jar];
  28.             if (jarCl == null) {
  29.                 screengrab.debug("Creating class loader for " + jar);
  30.                 var id = "{02450954-cdd9-410f-b1da-db804e18c671}";
  31.                 var ext = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).getInstallLocation(id).getItemLocation(id);
  32.                 var file = new java.io.File(ext.path + "/jars/" + jar).getAbsoluteFile();
  33.                 jarCl = java.net.URLClassLoader.newInstance(this.newArray("java.net.URL", file.toURL()));
  34.                 this.clForJar[jar] = jarCl;
  35.             }
  36.             var aClass = java.lang.Class.forName(className, true, jarCl);
  37.             screengrab.debug("Returning " + aClass.getName());
  38.             return aClass;
  39.         } catch (e) {
  40.             screengrab.error(this.getStackTrace(e));
  41.         }
  42.         return null;
  43.     },
  44.     isAvailable: function() {
  45.         try {
  46.             new java.lang.Integer(1);
  47.         } catch (error) {
  48.             return false;
  49.         }
  50.         var os = Packages.java.lang.System.getProperty("os.name");
  51.         if (os == "Linux") {
  52.             return true;
  53.         }
  54.         var version = Packages.java.lang.System.getProperty("java.version");
  55.         if (version == "1.6.0_10" || version == "1.6.0_11") {
  56.             return false;
  57.         }
  58.         return true;
  59.     },
  60.     capture: function(box) {
  61.         screengrab.debug(box);
  62.         var clazz = this.getClass("Base64$OutputStream", "base64.jar");
  63.         var baos = new java.io.ByteArrayOutputStream();
  64.         var constructor = clazz.getConstructor(this.newArray("java.lang.Class", java.lang.Class.forName("java.io.OutputStream")));
  65.         var b64os = constructor.newInstance(this.newArray("java.io.OutputStream", baos));
  66.         
  67.         var robot = new java.awt.Robot();
  68.         robot.setAutoWaitForIdle(true);
  69.         
  70.         var image = robot.createScreenCapture(new java.awt.Rectangle(box.x, box.y, box.width, box.height));
  71.         Packages.javax.imageio.ImageIO.write(image, "png", b64os);
  72.         b64os.close();
  73.         return "data:image/png;base64," + baos.toString();
  74.     }
  75. }
  76.